A computer system can be generally divided into four components: the hardware, the operating system, the application programs and the users. The hardware (central processing unit (CPU), memory and input/output (I/O) devices) provides the basic computing resources. The application programs (database systems, games business programs (database systems, etc.) define the ways in which these resources are used to solve the computing problems of the users. The operating system controls and coordinates the use of the hardware among the various application programs for the various users. In doing so, one goal of the operating system is to make the computer system convenient to use. A secondary goal is to use the hardware in an efficient manner.
The Unix operating system is one example of an operating system that is currently used by many enterprise computer systems. Unix was designed to be a simple time-sharing system, with a hierarchical file system, which supported multiple processes. A process is the execution of a program and consists of a pattern of bytes that the CPU interprets as machine instructions (text), data and stack. A stack defines a set of hardware registers or a reserved amount of main memory that is used for arithmetic calculations.
Unix consists of two separable parts: the “kernel” and the “system programs.” Systems programs consist of system libraries, compilers, interpreters, shells and other such programs which provide useful functions to the user. The kernel is the central controlling program that provides basic system facilities. The Unix kernel creates and manages processes, provides functions to access file-systems, and supplies communications facilities.
The Unix kernel is the only part of Unix that a user cannot replace. The kernel also provides the file system, CPU scheduling, memory management and other operating-system functions by responding to “system-calls.” Conceptually, the kernel is situated between the hardware and the users. System calls are the means for the programmer to communicate with the kernel.
FIG. 1 is a block diagram illustration of a prior art computer system 100 having a processor 110, file-system 120, memory 130, operating system 140, kernel 150, applications 160 and I/O devices 170. The prior art system 100 shown in FIG. 1 employs a distributed memory mapping scheme in which physical memory and I/O of the system 100 is mapped with hardware descriptors.
The prior art system 100 implements a shared resource environment which allows such system resources as memory 130 and file-system 120 to be shared between applications processes in applications 160. The kernel 150 includes interfaces that allows applications processes to access virtual memory in memory 130. In the system 100 shown in FIG. 1, the kernel interface has limitations in its capabilities in supporting multiple and varied applications that access the file-system 120 despite the shared environment of system 100. This is because new file-system technologies have limited applicability due to the difficulty in adapting others to accommodate them. For example, multiple page size support in the virtual memory system in system 100 is not supported in a UFS file-system or other file-systems. On-line backups via snapshots cannot handle the files which have locked pages.
The difficulties with current kernel interfaces is primarily due to their shared state. File-systems must implement knowledge about the virtual memory system in order to operate correctly. This knowledge is vague and dynamic with respect to a source base. The corresponding difficulty lies within the virtual memory system, in that it can only assume generic file-system behavior; file-systems typically have no way to indicate it can utilize a new behavior.
As distributed systems become prevalent, it is important that the number of system downtimes be substantially reduced. CPU and network speeds, RAM and disk sizes will increase and so will access to these devices. The interface between the file-system 120 and memory 130 implementation therefore becomes important.
Memory requirements of computer system 100 frequently cannot be met with a single memory device. Several memory devices must then be interconnected to form a memory system. In a memory system, capacity is expanded by increasing the number of words or by increasing the word length above an attainable single memory device. Word length is increased by placing the outputs of two or more memory devices in parallel. The number of words in a memory system is increased by multiplexing outputs from two or more memory devices.
A memory system with an increased number of words requires address expansion, it requires expanding the number of address bits to which the memory system responds. The number of address bits that a microprocessor provides dictates its memory address space or the range of memory locations it can directly address. Depending upon the size of the memory system, external address decoding logic, in addition to the memory's inputs may be also be required for address expansion. Random access memory (RAM) is typically the main memory in many prior art computers. As programs are run, they first load into RAM from the disk drive 170, and the operating system then jumps to the beginning of the program to begin executing it. Program data also loads into computer's RAM. As changes are made in the data, the contents of the RAM are altered, and when the user finishes with the application, the revised data is copied back to the disk drive.
Read only memory (ROM) is the part of memory where, normally the basic input/output system (BIOS) of the computer resides. The BIOS is the interface between the computer hardware and the operating system and applications software. Under normal circumstances, one cannot write to ROM.
The size of the RAM and the ROM and the locations of various components is shown with memory. The prior art computer 100 includes several memory types that access different locations in the main memory. And in order to have a cohesive memory access to the various applications that run in the computer system 100, the memory device 130 in the prior computer system 100 typically has a number of memory descriptors 214–216 that define relationships between the applications and main memory identifying specific address ranges 210–212 for specific purposes. As illustrated in FIG. 2, the prior art computer 100 has unique specific descriptors 214–216 for each instance of an application that access a different type of memory in the system 100.
Having a number of descriptors represent a single application's access to memory could lead to errors to describe regions in main memory owned by a single device. The large number of descriptors also results in the use of a large number of memory logic circuitry to design main memory which could then result in slow access to memory in the computer system. Furthermore, the prior art has memory segments with corresponding page table entries for each application access main memory. There is a many-to-one relationship between the page table entries and the memory segments for applications which results to additional memory resources unnecessarily allocated to the applications.